Uitwisselprofiel ActiZ Belangenbehartiging

Over Uitwisselprofiel ActiZ Belangenbehartiging


Publicatiedatum:
22-01-2026

Inwerkingtreding:
01-02-2026

2.6. Wat is het kortdurend ziekteverzuimpercentage (excl. zwangerschapsverlof)?

Concepten

Relaties

Eigenschappen

Instanties

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: ActiZ 2.6
2# Parameters: ?jaar, ?kwartaal
3# Ontologie: versie 3.0 of nieuwer
4
5PREFIX onz-g:   <http://purl.org/ozo/onz-g#>
6PREFIX onz-org: <http://purl.org/ozo/onz-org#>
7PREFIX time:    <http://www.w3.org/2006/time#>
8PREFIX onz-pers:<http://purl.org/ozo/onz-pers#>
9PREFIX xsd:     <http://www.w3.org/2001/XMLSchema#>
10
11SELECT
12  (?vestiging AS ?Indeling)
13  (?zk_regio_code AS ?Zorgkantoorregio_code)
14  (IF(SUM(?noemer_som) = 0,
15      "Ongedefinieerd",
16      ROUND( (100.0 * SUM(?ziekte_som) / SUM(?noemer_som)) * 100 ) / 100
17     ) AS ?Procent_ziekteverzuim)
18WHERE 
19{
20  {
21    SELECT 
22      ?overeenkomst_afspraak 
23      ?persoon 
24      (SUM(?ziekte_verzuim) AS ?ziekte_som) 
25      (SUM(?noemer_afspraak) AS ?noemer_som) 
26    WHERE
27    {
28      # TELLER: selecteer het ?ziekte_verzuim van de medewerkers per persoon per werkovereenkomstafspraak
29      {
30        SELECT     
31          ?overeenkomst_afspraak
32          ?persoon
33          ?ziekte_verzuim
34          ("0.0"^^xsd:decimal AS ?noemer_afspraak)
35        WHERE {
36          #BIND(2024 AS ?jaar)
37          #BIND("Q1" AS ?kwartaal)
38          BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')),
39               IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')),
40               IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')),
41               IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')),'')))) AS ?start_periode)
42          BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode)
43
44          # Selecteer alle arbeidsovereenkomsten die geldig zijn
45          ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; onz-g:hasPart ?overeenkomst_afspraak .
46          ?overeenkomst onz-pers:heeftOpdrachtnemer ?persoon .
47          ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; onz-g:hasPart ?omvang ; onz-g:startDatum ?start_afspraak .
48          OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
49          FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak)))
50
51          # Bepaal per overeenkomstafspraak de ptf 
52          ?omvang a onz-pers:ContractOmvang ; onz-g:isAbout ?omvang_waarde .
53          ?omvang_waarde a onz-pers:ContractOmvangWaarde ; onz-g:hasDataValue ?omvang_getal ; onz-g:hasUnitOfMeasure ?omvang_eenheid .
54          ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor .
55          BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf)
56          
57          # Clip de afspraak op het kwartaal
58          BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr)
59          BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr)
60
61          # Check per afspraak of er ziekteverzuim is en wanneer deze start en eindigt 
62          OPTIONAL {
63            VALUES ?type_verzuim { onz-pers:ZiektePeriode  # onz-pers:ZwangerschapsVerlof (indien meenemen)
64            }
65            ?ziekte a ?type_verzuim ; onz-g:definedBy ?overeenkomst ; onz-g:startDatum ?start_ziekte_periode .
66            ?start_ziekte_periode ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_ziekte_periode_reken .
67            OPTIONAL { ?ziekte onz-g:eindDatum ?eind_ziekte_periode }
68
69            OPTIONAL {
70              ?ziekte onz-g:hasQuality ?verzuim_tijd .
71              ?verzuim_tijd a onz-pers:VerzuimTijdKwaliteit ; onz-g:hasQualityValue ?verzuim_waarde .
72              ?verzuim_waarde onz-g:hasUnitOfMeasure onz-g:percent ; onz-g:startDatum ?start_verzuim_waarde_temp .
73              OPTIONAL { ?verzuim_waarde onz-g:hasDataValue ?verzuim_percentage }
74              OPTIONAL { ?verzuim_waarde onz-g:eindDatum ?eind_verzuim_waarde_temp }
75            }
76          }
77
78          # Zorg ervoor dat ziekteperiodes overlappen met de looptijd van de afspraak en het kwartaal 
79          FILTER((?start_ziekte_periode <= ?eind_afspraak_corr && (?eind_ziekte_periode >= ?start_afspraak_corr || !BOUND(?eind_ziekte_periode))))
80		  FILTER ((?start_ziekte_periode <= ?eind_periode && (?eind_ziekte_periode >= ?start_periode || !BOUND(?eind_ziekte_periode))))
81
82          # Zorg ervoor dat verzuimperiodes overlappen met de looptijd van de afspraak en het kwartaal 
83          FILTER ((?start_verzuim_waarde_temp <= ?eind_periode && (?eind_verzuim_waarde_temp >= ?start_periode || !BOUND(?eind_verzuim_waarde_temp))))
84          FILTER ((?start_verzuim_waarde_temp <= ?eind_afspraak_corr && (!BOUND(?eind_verzuim_waarde_temp) || ?eind_verzuim_waarde_temp >= ?start_afspraak_corr)) )
85
86          # Bepaal de einddatum van de ziekteperiode (als langer doorloopt óf geen einddatum: klip op het einde van het kwartaal)
87          BIND(IF(!BOUND(?ziekte), ?unbound, IF(!BOUND(?eind_ziekte_periode) || ?eind_ziekte_periode > ?eind_periode, ?eind_periode, ?eind_ziekte_periode)) AS ?eind_ziekte_periode_clip)
88          OPTIONAL { FILTER(BOUND(?eind_ziekte_periode_clip)) ?eind_ziekte_periode_clip ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_ziekte_periode_reken }
89
90          # Filter op kortdurende ziekte (<= 28 dagen)
91          BIND(IF( !BOUND(?eind_ziekte_periode_reken) || !BOUND(?start_ziekte_periode_reken), ?unbound, ?eind_ziekte_periode_reken - ?start_ziekte_periode_reken + 1) AS ?dagen_ziekte_periode)
92          FILTER(?dagen_ziekte_periode <= 28)
93
94          # Zorg dat de start- en eind verzuimdatum binnen de meetperiode vallen
95          BIND(IF(?start_verzuim_waarde_temp < ?start_afspraak_corr, ?start_afspraak_corr, ?start_verzuim_waarde_temp) AS ?start_verzuim_waarde_final)
96          BIND(IF(!BOUND(?eind_verzuim_waarde_temp), ?eind_afspraak_corr, IF(?eind_verzuim_waarde_temp > ?eind_afspraak_corr, ?eind_afspraak_corr, ?eind_verzuim_waarde_temp)) AS 
97                        ?eind_verzuim_waarde_final)
98
99          # Bereken per verzuimperiode het aantal zieke dagen
100          OPTIONAL {
101            FILTER(BOUND(?start_verzuim_waarde_final) && BOUND(?eind_verzuim_waarde_final))
102            ?start_verzuim_waarde_final ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_verzuim_waarde_final_reken .
103            ?eind_verzuim_waarde_final  ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_verzuim_waarde_final_reken .
104            BIND(?eind_verzuim_waarde_final_reken - ?start_verzuim_waarde_final_reken + 1 AS ?dagen_verzuim_periode)
105          }
106
107          # Bereken het ziekteverzuim per dag (PTF * ZIEKTEPERCENTAGE * DAGEN VERZUIM PERIODE)
108          BIND(IF(BOUND(?verzuim_percentage), xsd:decimal(?verzuim_percentage), 100.0) AS ?pct)
109          BIND(IF(BOUND(?dagen_verzuim_periode), ?ptf * (?pct / 100.0) * ?dagen_verzuim_periode, ?unbound) AS ?ziekte_verzuim)
110        } 
111      }   
112      UNION
113      # Noemer: selecteer ptf * dagen afspraak van de medewerkers per persoon per afspraak, ongeacht verzuim
114      {
115        SELECT     
116          ?overeenkomst_afspraak
117          ?persoon
118          ("0.0"^^xsd:decimal AS ?ziekte_verzuim)
119          ?noemer_afspraak
120        WHERE 
121        {
122          #BIND(2024 AS ?jaar)
123          #BIND("Q1" AS ?kwartaal)
124          BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')),
125               IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')),
126               IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')),
127               IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')),'')))) AS ?start_periode)
128          BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode)
129
130          # Selecteer alle arbeidsovereenkomsten die geldig zijn
131          ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; onz-g:hasPart ?overeenkomst_afspraak .
132          ?overeenkomst onz-pers:heeftOpdrachtnemer ?persoon .
133          ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; onz-g:hasPart ?omvang ; onz-g:startDatum ?start_afspraak .
134          OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
135          FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak)))
136
137          # Bepaal per overeenkomstafspraak de ptf 
138          ?omvang a onz-pers:ContractOmvang ; onz-g:isAbout ?omvang_waarde .
139          ?omvang_waarde a onz-pers:ContractOmvangWaarde ; onz-g:hasDataValue ?omvang_getal ; onz-g:hasUnitOfMeasure ?omvang_eenheid .
140          ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor .
141          BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf)
142
143          # Clip de afspraak op het kwartaal
144          BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr)
145          BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr)
146
147          # Bereken hoeveel dagen van de afspraak overlappen met de meetperiode
148          ?start_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_afspraak_reken .
149          ?eind_afspraak_corr  ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_afspraak_reken .
150          BIND(?eind_afspraak_reken - ?start_afspraak_reken + 1 AS ?dagen_afspraak)
151          
152          # Noemer per afspraak = PTF * kalenderdagen binnen meetperiode
153          BIND(?ptf * ?dagen_afspraak AS ?noemer_afspraak)
154        } 
155      }   
156    } 
157    GROUP BY ?overeenkomst_afspraak  ?persoon
158  } 
159
160  ?overeenkomst_afspraak onz-g:isAbout ?locatie .
161  {
162   # Tak 1: echte vestiging + afleiding zorgkantoorregio
163   ?locatie onz-g:partOf* ?vestiging_uri .
164   ?vestiging_uri a onz-org:Vestiging ;
165   onz-g:identifiedBy ?vest_nr ;
166   onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
167   ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging .
168
169   BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
170   ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio .
171   ?zk_regio a onz-org:ZorgkantoorRegio .
172   }
173   UNION
174   {
175   # Tak 2: totaal organisatie, laat ?zk_regio ongebonden (leeg in output)
176   ?locatie onz-g:partOf* ?vestiging_uri .
177   ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
178   BIND("Totaal organisatie" AS ?vestiging)
179   }
180
181   BIND(IF(BOUND(?zk_regio), STRAFTER(STR(?zk_regio), "/onz-org/"), ?unbound) AS ?zk_regio_code)
182
183} 
184GROUP BY ?vestiging ?zk_regio_code
185ORDER BY ?Indeling